package com.shop.mapper;

import com.shop.entity.Member;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 会员数据访问层
 * 
 * 提供会员相关的数据库操作接口
 * 
 * @author Shop Management System
 * @version 1.0
 * @since 2024-01-01
 */
@Mapper
public interface MemberMapper {
    
    /**
     * 查询所有会员
     * 
     * @return 会员列表
     */
    List<Member> findAll();
    
    /**
     * 根据ID查询会员
     * 
     * @param id 会员ID
     * @return 会员信息
     */
    Member findById(@Param("id") Long id);
    
    /**
     * 根据会员卡号查询会员
     * 
     * @param cardNumber 会员卡号
     * @return 会员信息
     */
    Member findByCardNumber(@Param("cardNumber") String cardNumber);
    
    /**
     * 根据手机号查询会员
     * 
     * @param phone 手机号
     * @return 会员信息
     */
    Member findByPhone(@Param("phone") String phone);
    
    /**
     * 根据姓名或手机号模糊查询会员
     * 
     * @param name 姓名关键词
     * @param phone 手机号关键词
     * @return 会员列表
     */
    List<Member> findByNameContainingOrPhoneContaining(@Param("name") String name, @Param("phone") String phone);
    
    /**
     * 查询消费金额超过指定值的会员
     * 
     * @param minAmount 最小消费金额
     * @return 会员列表
     */
    List<Member> findTopConsumers(@Param("minAmount") Double minAmount);
    
    /**
     * 查询所有激活状态的会员
     * 
     * @return 会员列表
     */
    List<Member> findByIsActiveTrue();
    
    /**
     * 保存会员信息
     * 
     * @param member 会员信息
     * @return 影响行数
     */
    int save(Member member);
    
    /**
     * 更新会员信息
     * 
     * @param member 会员信息
     * @return 影响行数
     */
    int update(Member member);
    
    /**
     * 插入会员
     * @param member
     */
    void insert(Member member);
    Member findByPhoneNumber(String phoneNumber);
} 